package com.chinawayltd.ews.sample.taskCenter.distributedLock;

/**
 * @program: greeProject.timingTaskCenter
 * @description:
 * @author: xiazj
 * @create: 2018-06-04 15:23
 **/
public interface DistributedLockManager {
    //默认超时时间3分钟
    Integer DEF_EXPIRE_TIME = 1800;

    /**
     * 尝试获取分布式锁
     * @param lockKey 锁名
     * @param requestId 程序唯一标识
     * @param expireTime 锁失效时间(单位：秒)
     * @return
     */
    boolean tryLock(String lockKey, String requestId, int expireTime);

    /**
     * 尝试获取分布式锁
     * @param lockKey 锁名
     * @param expireTime 锁失效时间(单位：秒)
     * @return
     */
    boolean tryLock(String lockKey, int expireTime);

    /**
     * 尝试获取分布式锁
     * @param lockKey 锁名
     * @param requestId 程序唯一标识
     * @return
     */
    boolean tryLock(String lockKey, String requestId);

    /**
     * 尝试获取分布式锁
     * @param lockKey 锁名
     * @return
     */
    boolean tryLock(String lockKey);

    /**
     * 释放分布式锁
     * @param lockKey 锁名
     * @param requestId 程序唯一标识
     * @return
     */
    boolean releaseLock(String lockKey, String requestId);

    /**
     * 释放分布式锁
     * @param lockKey 锁名
     * @return
     */
    boolean releaseLock(String lockKey);

    /**
     * 调用过后延迟1秒释放分布式锁，避免程序执行过快导致锁不生效
     * @param lockKey 锁名
     * @param requestId 程序唯一标识
     * @return
     */
    boolean releaseLockDelay(String lockKey, String requestId);

    /**
     * 调用过后延迟1秒释放分布式锁，避免程序执行过快导致锁不生效
     * @param lockKey 锁名
     * @return
     */
    boolean releaseLockDelay(String lockKey);

}
